﻿using System;
using System.Collections;

using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using App_Negocio;
using System.Collections.Generic;
using System.Security.Principal;


public partial class BuscaPresupuesto : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            IPrincipal p = HttpContext.Current.User;

            if (!p.IsInRole("Empleado"))
            {
                Session["Mensaje"] = "Usted no posee los permisos necesarios para ingresar a esta pagina";

                if (Session["Identificador"] != null)
                {
                    Session["IrAPagina"] = "Principal_Clientes.aspx";
                    Response.Redirect("Bienvenida.aspx");
                }
                else
                {
                    Response.Redirect("login.aspx");
                }
            }
            else
            {
                actualizarPagina();
                mostrarPresupuestoSeleccionado(false);
            }
        }        
    }

    private App_Negocio.Presupuesto seleccionado;

    public App_Negocio.Presupuesto Seleccionado
    {
        get { return seleccionado; }
        set { seleccionado = value; }
    }

    protected bool listarPresupuestos()
    {
        //ademas de lo que esta trayendo tendria que traer el precio real y precio estimado
        App_Negocio.Presupuesto pre = new App_Negocio.Presupuesto();
        DataTable dt = pre.listarPresupuestosEnviados();
        DataView dv = dt.DefaultView;
        Session["dvPresupuesto"] = dv;
        gvPresupuesto.DataSource = dv;
        gvPresupuesto.DataKeyNames = new string[] { "Nro", "Fecha", "Presupuesto", "Salon", "Apellido", "Nombre", "Email", "Observacion", "ClienteId", "FechaEvento", "TipoEventoId", "SalonId" };
        gvPresupuesto.DataBind();
        bool hayFilas = false;
        if (dt.Rows.Count > 0)
        {
            hayFilas = true;
        }

        return hayFilas;
    }

    protected void gvPresupuesto_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
    {
        // pnlPresupSelec.Visible = true;
        gvPresupuesto.SelectedIndex = e.NewSelectedIndex;
        Seleccionado = new App_Negocio.Presupuesto();

        Seleccionado.Id = int.Parse(string.Format(gvPresupuesto.SelectedDataKey.Values["Nro"].ToString()));
        //lblNroPresupuesto.Text = seleccionado.Id.ToString();

        Seleccionado.Salon = new Salon();
        Seleccionado.Salon.Nombre = string.Format(gvPresupuesto.SelectedDataKey.Values["Salon"].ToString());
        Seleccionado.Salon.Id=int.Parse(string.Format(gvPresupuesto.SelectedDataKey.Values["SalonId"].ToString()));
        lblNombreSalon.Text = seleccionado.Salon.Nombre;

        Seleccionado.Cliente = new App_Negocio.Cliente();
        Seleccionado.Cliente.ClienteId=int.Parse(string.Format(gvPresupuesto.SelectedDataKey.Values["ClienteId"].ToString()));
        Seleccionado.Cliente.NomCliente = string.Format(gvPresupuesto.SelectedDataKey.Values["Nombre"].ToString());
        Seleccionado.Cliente.ApeCliente = string.Format(gvPresupuesto.SelectedDataKey.Values["Apellido"].ToString());
        Seleccionado.Cliente.Email = string.Format(gvPresupuesto.SelectedDataKey.Values["Email"].ToString());

        lblApellidoYNombre.Text = seleccionado.Cliente.ApeCliente + ", " + seleccionado.Cliente.NomCliente;

        Seleccionado.CantPersonas = int.Parse(string.Format(gvPresupuesto.SelectedDataKey.Values["Presupuesto"].ToString()));
        lblCantPersonas.Text = seleccionado.CantPersonas.ToString();

        Seleccionado.Comentario = string.Format(gvPresupuesto.SelectedDataKey.Values["Observacion"].ToString());
        txtObservaciones.Text = Seleccionado.Comentario;

        Seleccionado.FechaEvento= DateTime.Parse(gvPresupuesto.SelectedDataKey.Values["FechaEvento"].ToString());
        
        Seleccionado.TipoEvento= new EventoTipo();
        Seleccionado.TipoEvento.Id=int.Parse(string.Format(gvPresupuesto.SelectedDataKey.Values["TipoEventoId"].ToString()));

        Seleccionado.buscarPresupuestoCompleto();

        cargarTablaMenues(seleccionado, e.NewSelectedIndex);
        cargarTablaBebidas(seleccionado);
        cargarTablaSAdicionales(seleccionado);

      //  divPresupuesto.Visible = true;

        Session["Seleccionado"] = Seleccionado;
        lblMensajePendientes.Text = string.Empty;
        lblMensajePendientes.Visible = false;


        //Accordion1.SelectedIndex = 1;//el detalle
        Accordion2.SelectedIndex = 0;
        //txtNPrecioMenu1.Text = String.Empty;
        //txtNPrecioMenu2.Text = String.Empty;
        //txtNPrecioMenu3.Text = String.Empty;

        mostrarPresupuestoSeleccionado(true);
    }

    private void cargarTablaBebidas(App_Negocio.Presupuesto presu)
    {
        gvPresupBebidas.DataSource = presu.BebidasTabla;
        gvPresupBebidas.DataBind();
    }

    private void cargarTablaSAdicionales(App_Negocio.Presupuesto presu)
    {
        gvPresupSAdicionales.DataSource = presu.SAdicionalesTabla;
        gvPresupSAdicionales.DataBind();
    }

    private void cargarTablaMenues(App_Negocio.Presupuesto presu, int newSelectedIndex)
    {
        LinkedList<GridView> dvs = new LinkedList<GridView>();
        dvs.AddLast(gvMenu1);
        dvs.AddLast(gvMenu2);
        dvs.AddLast(gvMenu3);

        LinkedList<Label> lbls = new LinkedList<Label>();
        lbls.AddLast(lblPrecioMenu1);
        lbls.AddLast(lblPrecioMenu2);
        lbls.AddLast(lblPrecioMenu3);

        LinkedList<Label> nombresMenu = new LinkedList<Label>();
        nombresMenu.AddLast(txtNombreMenu1);
        nombresMenu.AddLast(txtNombreMenu2);
        nombresMenu.AddLast(txtNombreMenu3);

        //buscar a partir de aca
        int desde = newSelectedIndex;
        int indice = 0;
        List<DataView> lista = presu.MenuesTabla;
        foreach (DataView gView in lista)
        {
            dvs.ElementAt<GridView>(indice).DataSource = gView;
            dvs.ElementAt<GridView>(indice).DataBind();
            indice = indice + 1;
        }
        indice = 0;
        foreach (Presupuesto_Detalle pd in presu.PresupuestoDetalle)
        {
            lbls.ElementAt<Label>(indice).Text = pd.PrecioVenta.ToString();
            nombresMenu.ElementAt<Label>(indice).Text = pd.Menu.Nombre;
            indice = indice + 1;
        }

        // Desabilitando los paneles sin datos

        divMenu1.Visible = true;
        divMenu2.Visible = true;
        divMenu3.Visible = true;

        if (gvMenu1.Rows.Count <= 0)
        {
            divMenu1.Visible = false;
        }
        if (gvMenu2.Rows.Count <= 0)
        {
            divMenu2.Visible = false;
        }
        if (gvMenu3.Rows.Count <= 0)
        {
            divMenu3.Visible = false;
        }

    }

    private void actualizarPagina()
    {
        bool hayPresupuestos = listarPresupuestos();
        //  pnlPresupSelec.Visible = false;
        lblMensajePendientes.Visible = false;
        //txtNPrecioMenu1.Text = String.Empty;
        //txtNPrecioMenu2.Text = String.Empty;
        //txtNPrecioMenu3.Text = String.Empty;
        if (!hayPresupuestos)
        {
            lblMensajePendientes.Text = "No hay presupuestos pendientes de envio";
            lblMensajePendientes.Visible = true;
        }
    }

    protected void gvPresupuesto_Sorting(object sender, GridViewSortEventArgs e)
    {
        DataView dv = ((DataView)Session["dvPresupuesto"]);
        dv.Sort = e.SortExpression;
        gvPresupuesto.DataSource = dv;
        gvPresupuesto.PageIndex = 0;
        gvPresupuesto.DataBind();
    }

    protected void mostrarPresupuestoSeleccionado(bool habilitar)
    {
        divPresupuesto.Visible = habilitar;
        divMensajePSeleccionado.Visible = !habilitar;
        lblMensajePSeleccionado.Text = "No se ha seleccionado ningún Presupuesto Pendiente";
    }

    protected void btnCrearEvento_Click(object sender, EventArgs e)
    {
        if (Page.IsValid)
        {
            Seleccionado = (App_Negocio.Presupuesto)Session["Seleccionado"];
            actualizarPagina();
            Accordion2.SelectedIndex = 0;
            Accordion1.SelectedIndex = 0;
            mostrarPresupuestoSeleccionado(false);
            Response.Redirect("Evento.aspx");

        }
    }
}
